/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.montadora.abc.controller;

import br.com.montadora.abc.dao.VeiculoDAO;
import br.com.montadora.abc.model.Montadora;
import br.com.montadora.abc.model.Veiculo;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author Aurelio
 */
@ManagedBean(name = "veiculoCtrl")
@SessionScoped
public class VeiculoController {
    private VeiculoDAO veiculoDAO;
    private Veiculo veiculo;
    private Integer idMontadoraEscolhida;

    public VeiculoController() {
        veiculoDAO = VeiculoDAO.getInstance();
        veiculo = new Veiculo();
        
    }

    public List<SelectItem> carregarMontadoras(){
        List<Montadora> montadoras = veiculoDAO.carregarTudoOrdenado(Montadora.class, "nome");
        List<SelectItem> retorno = new ArrayList(montadoras.size());
        for (Montadora montadora : montadoras) {
            retorno.add(new SelectItem(montadora.getId(), montadora.getNome()));
        }
       return retorno;
    }
    
    public List<Veiculo> listarVeiculos(){
        List<Veiculo>listaVeiculos = new ArrayList<Veiculo>();
        try{
            listaVeiculos = veiculoDAO.carregarTudoOrdenado(Veiculo.class, "nome");
            return listaVeiculos;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }
    
    public void excluirVeiculo(Veiculo veiculo){
        try{
            veiculoDAO.excluir(veiculo);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Veículo excluído com sucesso!", null));

        }catch(Exception e){
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Ocorreu um Erro ao tentar excluir um veículo!", null));

        }
    }
    
    public void alterar(){
        try {
            Montadora montadora = (Montadora) veiculoDAO.carregarUm(idMontadoraEscolhida, Montadora.class);
            this.veiculo.setMontadora(montadora);
            veiculoDAO.alterar(this.veiculo);
            this.veiculo = new Veiculo();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Veículo atualizado com sucesso!", null));
            
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao atualizado veiculo", null));
        }
    }
    
    public void salvar(){
        try {
            Montadora montadora = (Montadora) veiculoDAO.carregarUm(idMontadoraEscolhida, Montadora.class);
            this.veiculo.setMontadora(montadora);
            veiculoDAO.gravar(this.veiculo);
            this.veiculo = new Veiculo();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Veículo salvo com sucesso!", null));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao salvar veiculo", null));
        }

    }
    
    public String editarVeiculo(){
        this.veiculo = veiculo;
        return "cadastrar.xhtml";
    }
    
    public String redirecionaParaListar(){
        return "listar.xhtml";
    }
    
    
    /**
     * @return the veiculo
     */
    public Veiculo getVeiculo() {
        return veiculo;
    }

    /**
     * @param veiculo the veiculo to set
     */
    public void setVeiculo(Veiculo veiculo) {
        this.veiculo = veiculo;
    }

    /**
     * @return the montadoraEscolhida
     */
    public Integer getIdMontadoraEscolhida() {
        return idMontadoraEscolhida;
    }

    /**
     * @param montadoraEscolhida the montadoraEscolhida to set
     */
    public void setIdMontadoraEscolhida(Integer idMontadoraEscolhida) {
        this.idMontadoraEscolhida = idMontadoraEscolhida;
    }


}
